package logica;

import java.io.Serializable;

public class Rama implements Serializable {

	private static final long serialVersionUID = 7226812685575005568L;

	private Rama m_positiva;
	private Rama m_negativa;
	private Rama m_anterior;
	private Elemento m_elemento;

	/** Crea una rama con elemento null. */
	public Rama() {
	}

	/** Crea una rama con elemento. */
	public Rama(Elemento elemento) {
		setElemento(elemento);
	}

	public void setElemento(Elemento elemento) {
		m_elemento = elemento;
	}

	/** Crea una sub-rama positiva. */
	public boolean addPositiva(Rama nueva) {
		if (isEmpty())
			return false;
		if (m_positiva == null && nueva != null) {
			m_positiva = nueva;
			m_positiva.setAterior(this);
			return true;
		}
		return false;
	}

	/** Crea una sub-rama negativa. */
	public boolean addNegativa(Rama nueva) {
		if (isEmpty())
			return false;
		if (m_negativa == null && nueva != null) {
			m_negativa = nueva;
			m_negativa.setAterior(this);
			return true;
		}
		return false;
	}

	private void setAterior(Rama anterior) {
		if (!isEmpty())
			m_anterior = anterior;
	}

	public Rama getAnterior() {
		return m_anterior;
	}

	public Rama getPositiva() {
		return m_positiva;
	}

	public Rama getNegativa() {
		return m_negativa;
	}

	public Elemento getElemento() {
		return m_elemento;
	}

	public boolean esUltima() {
		return (getPositiva() == null && getNegativa() == null);
	}

	// Es verdadero si no hay elemento
	public boolean isEmpty() {
		return (m_elemento == null || m_elemento.isEmpty());
	}

	public String toString() {
		return "["
				+ ((m_elemento != null) ? "ele=" + m_elemento.toString() : "")
				+ ((m_positiva != null) ? "\n>pos=" + m_positiva.toString()
						: "")
				+ ((m_negativa != null) ? "\n<neg=" + m_negativa.toString()
						: "") + "]";
	}

}
